package rothag.views.homemenu;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import rothag.controller.MainController;
import rothag.graphics.*;

import rothag.views.JButtonBase;
import rothag.views.JPanelBase;

/**
 *
 * @author Gaetan
 */
public class TopTenJPanel extends JPanelBase implements ActionListener, MouseListener {

    private JButtonBase details;
    private JButtonBase annuler;
    private JTable listePartie;
    private JScrollPane scrollPaneListe;
    private JLabel detailsPartie;
    private JScrollPane scrollPaneDetails;

    public TopTenJPanel(MainController controller) {
        super(controller);

        setBackground(new Color(0, 0, 0, 150));

        hauteur = 3 * GraphicsParameters.mainHeight / 4;
        largeur = GraphicsParameters.mainWidth / 2;

        Font font = GraphicsHelper.getFont(20, "italic");

        JLabel label = new JLabel("Top 10 des parties solos");
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setFont(font);
        label.setForeground(Color.WHITE);
        label.setBounds(0, 20, largeur, 50);
        add(label);

        font = GraphicsHelper.getFont(15, null);

        details = new JButtonBase("Détails");
        details.setFont(font);
        details.setBounds(largeur - 150, hauteur - 75, 100, 50);
        details.addActionListener(this);
        add(details);

        annuler = new JButtonBase("Annuler");
        annuler.setFont(font);
        annuler.setBounds(largeur - 270, hauteur - 75, 100, 50);
        annuler.addActionListener(this);
        add(annuler);

        int hauteurListe = hauteur - 200;
        int largeurListe = largeur - 100;

        listePartie = new JTable();
        listePartie.addMouseListener(this);
        listePartie.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        listePartie.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        scrollPaneListe = new JScrollPane(listePartie);
        GraphicsHelper.setCursorHand(scrollPaneListe);
        scrollPaneListe.setBounds((largeur - largeurListe) / 2, (hauteur - hauteurListe) / 2, largeurListe, hauteurListe);
        add(scrollPaneListe);

        font = GraphicsHelper.getFont(13, null);

        detailsPartie = new JLabel();
        detailsPartie.setOpaque(true);
        detailsPartie.setFont(font);
        detailsPartie.setBackground(Color.white);
        detailsPartie.setVerticalAlignment(SwingConstants.TOP);

        scrollPaneDetails = new JScrollPane(detailsPartie);
        scrollPaneDetails.setVisible(false);
        scrollPaneDetails.setBounds((largeur - largeurListe) / 2, (hauteur - hauteurListe) / 2, largeurListe, hauteurListe);
        add(scrollPaneDetails);
    }

    public void reset() {
        try {
            TopTenTableModel tableModel = new TopTenTableModel(controller.getTopTen());

            listePartie.setModel(tableModel);
        } catch (Exception ex) {
            GraphicsHelper.afficherErreur("Erreur", "Erreur lors de la lecture du fichier de sauvegarde. Veuillez supprimer le fichier savegame.rothag et réessayer.", this).setVisible(true);
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == details) {
            details();
        } else if (e.getSource() == annuler) {
            annuler();
        }
    }

    private void annuler() {
        if (scrollPaneDetails.isVisible()) {
            setVisible(false);
            scrollPaneDetails.setVisible(false);
            scrollPaneListe.setVisible(true);
            setVisible(true);
        } else {
            setVisible(false);
            if (getParent() instanceof HomeMenuJPanel) {
                ((HomeMenuJPanel) getParent()).menuPrincipal();
            }
        }
    }

    private void details() {
        if (listePartie.getSelectedRow() != -1) {
            ArrayList<String> liste = ((TopTenTableModel) listePartie.getModel()).getListeActions(listePartie.getSelectedRow());
            StringBuilder text = new StringBuilder("<html>");

            if (liste != null) {
                for (String str : liste) {
                    text.append("<br>");
                    text.append(str);
                }
            }
            text.append("</html>");

            setVisible(false);
            detailsPartie.setText(text.toString());
            scrollPaneDetails.setVisible(true);
            scrollPaneDetails.getVerticalScrollBar().setValue(0);
            scrollPaneListe.setVisible(false);
            setVisible(true);
        }
    }

    public void mouseClicked(MouseEvent e) {
        if (e.getSource() == listePartie && e.getClickCount() == 2) {
            details();
        }
    }

    public void mousePressed(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }
}
